namespace php Services.BailService
namespace java Services.BailService
namespace go Services.BailService

// 异常模型
exception InvalidException {
	1: i32 code
    2: string message
    3: string data
}

// 保证金返回数据模型
struct Bail {
	1: i32 code
    2: string message
    3: map<string,string> data
}

service BailService{

    /**
     * 获取车商保证金信息
     * @param integer dealerId 车商ID
     * @return Bail
     * @value   code	                 string	 状态码 '000000':正确 >0:错误
     * @value   msg	                     string	 错误描述
     * @value   data	                 string	 返回数据
     * @value   data[bail_amount]	     double	 车商可用保证金
     * @value   data[dealer_id]	         int	 车商ID
     * @value   data[freeze_amount]	     double	 冻结保证金金额
     * @value   data[indemnity_amount]	 double	 累计赔付金额
     * @value   data[minus_amount]	     double	 维保透支金额
    */
    Bail getDealerBail(1:i64 dealerId) throws (1:InvalidException ex),

    /**
     * 冻结车商可用保证金
     * @param integer dealerId 车商ID
     * @param double  amount   金额
     * @param integer orderId  拍单ID
     * @return Bail
     * @value   code	                 string	 状态码 '000000':正确 >0:错误
     * @value   msg	                     string	 错误描述
     * @value   data	                 string	 返回数据
     * @value   data[bail_amount]	     double	 车商可用保证金
     * @value   data[dealer_id]	         int	 车商ID
     * @value   data[freeze_amount]	     double	 冻结保证金金额
     * @value   data[indemnity_amount]	 double	 累计赔付金额
     * @value   data[minus_amount]	     double	 维保透支金额
    */
    Bail freezeBail(1:i64 dealerId, 2:double amount, 3:i64 orderId) throws (1:InvalidException ex),

    /**
     * 解冻车商冻结保证金
     * @param string dealerId 车商ID    TODO 优化   类型优化
     * @param integer orderId  拍单ID
     * @return Bail
     * @value   code	                 string	 状态码 '000000':正确 >0:错误
     * @value   msg	                     string	 错误描述
     * @value   data	                 string	 返回数据
     * @value   data[bail_amount]	     double	 车商可用保证金
     * @value   data[dealer_id]	         int	 车商ID
     * @value   data[freeze_amount]	     double	 冻结保证金金额
     * @value   data[indemnity_amount]	 double	 累计赔付金额
     * @value   data[minus_amount]	     double	 维保透支金额
    */
    Bail unfreezeBail(1:string dealerId, 2:i64 orderId) throws (1:InvalidException ex),

    /**
     * 扣除可用车商保证金
     * @param integer dealerId   车商ID
     * @param double  amount     金额
     * @param integer useType    类型    仅限(4:提取,5:争议支出,6:违约赔付,8:赔付)
     * @param string  useDetail  备注说明
     * @param integer orderId    订单ID
     * @param integer rechargeMethod  扣除方式
     * @param integer payMentId  付款单ID
     * @param integer collectionId  收款单ID
     * @value   code	                 string	 状态码 '000000':正确 >0:错误
     * @value   msg	                     string	 错误描述
     * @value   data	                 string	 返回数据
     * @value   data[bail_amount]	     double	 车商可用保证金
     * @value   data[dealer_id]	         int	 车商ID
     * @value   data[freeze_amount]	     double	 冻结保证金金额
     * @value   data[indemnity_amount]	 double	 累计赔付金额
     * @value   data[minus_amount]	     double	 维保透支金额
    */
    Bail decBail(1:i64 dealerId, 2:double amount, 3:i32 useType, 4:string useDetail,5:i64 orderId,6:i32 rechargeMethod, 7:i64 payMentId, 8:i64 collectionId) throws (1:InvalidException ex),

    /**
     * 保证金充值
     * @param integer dealerId       车商ID
     * @param double  amount         金额
     * @param string  useDetail      备注说明
     * @param string  rechargeNo     订单编号
     * @param integer rechargeId     订单ID
     * @param integer rechargeMethod 充值方式  仅限(1:支付宝 , 2:拉卡拉 , 3:线下充值)
     * @param integer collectionId   收款单ID
     * @return Bail
     * @value   code	                 string	 状态码 '000000':正确 >0:错误
     * @value   msg	                     string	 错误描述
     * @value   data	                 string	 返回数据
     * @value   data[bail_amount]	     double	 车商可用保证金
     * @value   data[dealer_id]	         int	 车商ID
     * @value   data[freeze_amount]	     double	 冻结保证金金额
     * @value   data[indemnity_amount]	 double	 累计赔付金额
     * @value   data[minus_amount]	     double	 维保透支金额
    */
    Bail incBail(1:i64 dealerId, 2:double amount, 3:string useDetail, 4:string rechargeNo, 5:i64 rechargeId, 6:i32 rechargeMethod,7:i32 collectionId) throws (1:InvalidException ex)

    /**
     * 扣除冻结保证金并解冻冻结保证金
     * @param integer dealerId  车商ID
     * @param double  amount    金额
     * @param integer orderId   订单号
     * @param integer useType   类型
     * @param string useDetail  备注说明
     * @return Bail
     * @value   code	                string	状态码 '000000':正确 >0:错误
     * @value   msg	                    string	错误描述
     * @value   data	                string	返回数据
     * @value   data[bail_amount]	    double	车商可用保证金
     * @value   data[dealer_id]	        int	    车商ID
     * @value   data[freeze_amount]	    double	冻结保证金金额
     * @value   data[indemnity_amount]	double	累计赔付金额
     * @value   data[minus_amount]	    double	维保透支金额
    */
    Bail unfreezeDecBail(1:i64 dealerId, 2:i64 orderId, 3:double decAmount,4:i32 useType,5:string useDetail) throws (1:InvalidException ex)

    /**
     * 获取保证金使用记录
     * @param integer dealerId   车商ID
     * @param integer useType    使用类型     仅限(1:充值 , 2:冻结出价保证金 , 3:解冻出价保证金 , 4:提取 , 5:争议支出 , 6:违约赔付 , 7:其它 , 8:消费)
     * @param string  useTime    查询时间
     * @param integer page       页数
     * @param integer pageSzie   每页数量
     * @param integer isUnFree 是否冻结中  0 否  1 是
     * @param integer payMethod   充值方式
     * @return  Bail
     * @value   code	            string	状态码 '000000':正确 >0:错误
     * @value   msg	                string	错误描述
     * @value   data	            string	返回数据
     * @value   data[bl_id]	        int	    非业务主键ID
     * @value   data[dealer_id]	    int	    车商ID
     * @value   data[use_time]	    string	交易时间
     * @value   data[use_type]	    int	    交易类型
     * @value   data[use_detail]	string	应用明细
     * @value   data[occur_money]	double	发生金额
     * @value   data[remain_amount]	double	可用金额
    */
    Bail getBailLogsByDealerId(1:i64 dealerId, 2:i32 useType,  3:string useTime, 4:i32 page, 5:i32 pageSize,6:i32 isUnFree,7:i32 payMethod)throws (1:InvalidException ex)
}